//
//  Problem5713.swift
//  TestProject
//
//  Created by 毕武侠 on 2021/3/28.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 5713. 字符串中不同整数的数目
 给你一个字符串 word ，该字符串由数字和小写英文字母组成。

 请你用空格替换每个不是数字的字符。例如，"a123bc34d8ef34" 将会变成 " 123  34 8  34" 。注意，剩下的这些整数间至少要用一个空格隔开："123"、"34"、"8" 和 "34" 。
 返回对 word 完成替换后形成的 不同 整数的数目。
 如果两个整数的 不含前导零 的十进制表示不同，则认为这两个整数也不同。

 示例 1：
     输入：word = "a123bc34d8ef34"
     输出：3
     解释：不同的整数有 "123"、"34" 和 "8" 。注意，"34" 只计数一次。
 示例 2：
     输入：word = "leet1234code234"
     输出：2
 示例 3：
     输入：word = "a1b01c001"
     输出：1
     解释："1"、"01" 和 "001" 视为同一个整数的十进制表示，因为在比较十进制值时会忽略前导零的存在。
 提示：
     1 <= word.length <= 1000
     word 由数字和小写英文字母组成
 */
@objcMembers class Problem5713: NSObject {
    func solution() {
        print(numDifferentIntegers("a123bc34d8ef34"))
        print(numDifferentIntegers("leet1234code234"))
        print(numDifferentIntegers("a1b01c001"))
        print(numDifferentIntegers("a00b010c000"))
    }
    
    /*
     找到数字后，放入set中，返回set的个数
     注意处理 00 和 01
     */
    func numDifferentIntegers(_ word: String) -> Int {
        var strSet = Set<String>()
        
        var charts:[Character] = []
        for c in word {
            if c.isNumber {
                charts.append(c)
            } else {
                if charts.count > 0 {
                    while charts.count > 0 {
                        if charts.first == "0" {
                            charts.removeFirst()
                        } else {
                            break
                        }
                    }
                    if charts.count == 0 {
                        strSet.insert("0")
                    } else {
                        strSet.insert(String(charts))
                        charts.removeAll()
                    }
                }
                
            }
        }
        if charts.count > 0 {
            while charts.count > 0 {
                if charts.first == "0" {
                    charts.removeFirst()
                } else {
                    break
                }
            }
            if charts.count == 0 {
                strSet.insert("0")
            } else {
                strSet.insert(String(charts))
            }
        }
        return strSet.count
    }
}
